package com.yzc.Details;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yzc.model.entity.base.BaseEntity;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@Data
@TableName("t_user") // 对应数据库表名
public class SecurityUser extends BaseEntity implements UserDetails {

	private static final long serialVersionUID = 1L;

	// 用户名字段映射（数据库字段 name）
	@TableField("name")
	private String name; // Spring Security 的 UserDetails 需要 username 字段

	// 密码字段映射（数据库字段 pass）
	@TableField("pass")
	private String pass; // UserDetails 需要 password 字段

	@TableField("beizhu")
	private String remark;

	@TableField("email")
	private String email;

	// 用户权限列表（非数据库字段）
	@TableField(exist = false)
	private List<String> userPermsList;

	// 实现 UserDetails 接口方法
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		if (userPermsList == null) return Collections.emptyList();
		return userPermsList.stream()
				.map(perm -> new SimpleGrantedAuthority("ROLE_" + perm)) // 格式示例: ROLE_ADMIN
				.collect(Collectors.toList());
	}

	@Override
	public String getPassword() {
		return this.pass; // 返回数据库中的密码字段
	}

	@Override
	public String getUsername() {
		return this.name; // 返回数据库中的用户名字段
	}

	// 账户状态配置（根据业务需求调整返回值）
	@Override
	public boolean isAccountNonExpired() {
		return true; // 账户未过期
	}

	@Override
	public boolean isAccountNonLocked() {
		return true; // 账户未锁定
	}

	@Override
	public boolean isCredentialsNonExpired() {
		return true; // 凭证未过期
	}

	@Override
	public boolean isEnabled() {
		return true; // 账户已启用
	}
}